package com.sky.business.sys.service;

import com.sky.business.sys.domain.MediaServer;
import com.sky.common.zlm.param.StreamProxyOption;
import com.sky.common.zlm.resp.MediaStreamInfo;
import com.sky.common.zlm.resp.ThreadLoad;

import java.util.List;

/**
 * zlm 接口服务
 */
public interface ZlmClientService {

    /**
     * 获取线程负载以及延时
     *
     * @param mediaServer 流媒体服务信息
     * @return 线程负载列表
     */
    List<ThreadLoad> getThreadsLoad(MediaServer mediaServer);

    /**
     * 查看直播流列表
     * @param mediaServer 流媒体服务信息
     * @param schema 协议
     * @param appName 应用名称
     * @param streamName 流名称
     * @return 直播流列表
     */
    List<MediaStreamInfo>  getMediaList(MediaServer mediaServer, String schema, String appName, String streamName);

    /**
     * 获取所有直播流
     * @param mediaServer  流媒体服务信息
     * @return 直播流列表
     */
    List<MediaStreamInfo>  getAllMediaList(MediaServer mediaServer);


    /**
     * 增加拉流代理
     * @param mediaServer  流媒体服务信息
     * @param appName  应用名称
     * @param streamName 流名称
     * @param streamProxyOption 拉流选项
     * @return 流的唯一标识
     */
    String  addStreamProxy(MediaServer mediaServer, String appName,String streamName,StreamProxyOption streamProxyOption);


    /**
     * 删除拉流代理
     *
     * @param mediaServer 流媒体服务信息
     * @param key         流的唯一标识,{@link #addStreamProxy}方法的返回值
     * @return 是否成功
     */
    boolean delStreamProxy(MediaServer mediaServer, String key);


    /**
     * rtsp/rtmp主动推流
     * @param mediaServer 流媒体服务信息
     * @param schema 协议,rtmp或rtsp
     * @param appName 应用名称
     * @param streamName 流名称
     * @param dstUrl 推流url
     * @param retryCount 重试次数
     * @param rtpType rtsp推流时推流方式，0：tcp，1：udp
     * @param timeoutSec 超时时间,单位秒
     * @return  流的唯一标识
     */
    String  addStreamPusherProxy(MediaServer mediaServer,String schema,String appName,String streamName,String dstUrl,int retryCount,int rtpType,int timeoutSec);



    /**
     * 删除推流代理
     *
     * @param mediaServer 流媒体服务信息
     * @param key         流的唯一标识,{@link #addStreamPusherProxy}方法的返回值
     * @return 是否成功
     */
    boolean delStreamPusherProxy(MediaServer mediaServer, String key);





}
